package com.example.demo.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.example.demo.dto.EmailSexBeanDTO;
import com.example.demo.entity.TUser;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;
import java.util.List;
import java.util.Map;

/**
 * t_user表操作接口
 */
@Repository
public interface TUserMapper extends BaseMapper<TUser> {

    /**
     * 测试resultMap
     *
     * @return
     *      TUser列表
     */
	List<TUser> testResultMap();

    /**
     * 测试主键返回
     *
     * @param tUser
     *      t_user表对应实体
     * @return
     */
    int testKeyGenerate(TUser tUser);

    /**
     * 测试主键返回02
     *
     * @param tUser
     *      t_user表对应实体
     * @return
     */
    int testKeyGenerate02(TUser tUser);

    /**
     * 测试set标签
     *
     * @param tUser
     *      测试set标签
     * @return
     */
    int updateIfAndSetOper(TUser tUser);

    /**
     * 测试trim标签
     *
     * @param tUser
     *      测试set标签
     * @return
     */
    int insertIfAndTrimOper(TUser tUser);

    /**
     * 查询批量插入的数据
     *
     * @param names
     *      姓名数组
     * @return
     */
    List<TUser> selectForeach4In(String[] names);

    /**
     * 批量插入
     *
     * @param users
     *      t_user表对应实体列表
     * @return
     */
    int insertForeach4Batch(List<TUser> users);

    /**
     * 保存（带判空）
     *
     * @param record
     *      t_user表对应实体
     * @return
     */
    int insertSelective(TUser record);

    /**
     * 查询用户职位关联信息方式一
     */
    List<TUser> selectUserPosition01();

    /**
     * 查询用户职位关联信息方式二
     */
    List<TUser> selectUserPosition02();

    /**
     * 多参数查询方式一
     *
     * @param param
     *      map参数
     * @return
     */
    List<TUser> selectByEmailAndSex01(Map<String, Object> param);

    /**
     * 多参数查询方式二
     *
     * @param email
     *      电子邮件
     * @param sex
     *      性别
     * @return
     */
    List<TUser> selectByEmailAndSex02(@Param("email")String email, @Param("sex")Byte sex);

    /**
     * 多参数查询方式三
     *
     * @param emailSexBeanDTO
     *      邮件性别dto
     * @return
     */
    List<TUser> selectByEmailAndSex03(EmailSexBeanDTO emailSexBeanDTO);

    /**
     * 查询用户职位信息
     *    一对多方式一
     * @return
     */
    List<TUser> selectUserJobs01();

    /**
     * 查询用户职位信息
     *    一对多方式二
     * @return
     */
    List<TUser> selectUserJobs02();

    /**
     * 查询用户角色信息
     *    多对多查询
     */
    List<TUser> selectUserRole();

    /**
     * 根据roleId查询用户信息
     */
    List<TUser> selectUserByRoleId();
}